home *** CD-ROM | disk | FTP | other *** search
/ Moving Pixels Collection / Moving Pixels Collection.iso / st / chamber / source / brk1.s next >
Text File  |  1989-07-29  |  59KB  |  2,041 lines

  1.  
  2. sup:    clr.l   -(sp)
  3.         move.w  #$20,-(sp)
  4.         trap    #1
  5.         addq.l  #6,sp
  6.     move.w    #0,-(sp)    ;set to low res
  7.     move.l    #-1,-(sp)
  8.     move.l    #-1,-(sp)
  9.     move.w    #5,-(sp)
  10.     trap    #14
  11.     add.l    #12,sp
  12.     move.w  #-1,ynflg       
  13.     move.w    #-1,bynflg
  14.     move.w    #-1,outflg
  15.     move.w    #-1,gynflg
  16.     move.w    #150,ghostx
  17.     move.w    #20,ghosty
  18.     move.w    #24,bally
  19.     move.w    #149,ballx
  20.     move.b    #0,$484        ;turn key click and repeat off
  21.     move.w    #0,nbrks
  22.     move.w    #0,nrem
  23.     move.w    #-1,current
  24.     move.w    #1,plev
  25.     move.w    #0,score
  26.     move.w    #4,bound
  27.     move.w    #-1,brick
  28.     move.w    #-1,brtimes
  29.     move.w    #3,xvel
  30.     move.w    #0,lev
  31.     move.w    #0,count
  32.     move.w    #10,pdelay
  33.     move.w    #0,yvel
  34.     move.w    #150,bbx
  35.     move.w    #97,bby
  36.     move.l    #$ffffc00,kkk
  37.     jsr    mousof
  38.         jsr     getscrn
  39.     move.l    screen,d1
  40.     addi.l    #$8000,d1
  41.         move.l  d1,batadd
  42.         move.l  d1,tempad
  43.     move.l    d1,ballad
  44.     move.l    d1,ghostad
  45.     move.l    d1,safe
  46.     move.w    #-1,fast
  47.     jsr    linea    
  48.     jsr    colors
  49.     jsr    loadscr
  50.     jsr    loadtit
  51.     jsr     clearsc
  52.     move.l    screen3,which    ;title screen in screen3
  53.     jsr    copysc
  54.     lea    ball,a0
  55.     jsr    putvbl
  56.     move.w    #2,xvel
  57.     move.w    #2,yvel
  58.     jsr    putrout
  59.     jsr    wait
  60.     move.w    #0,xvel
  61.     move.w    #0,yvel
  62.     jsr    testd
  63.     move.w    #0,$452
  64.     move.w    #-1,bynflg
  65.     move.l    screen2,which    ;main screen in screen2
  66.     jsr    copysc    
  67.     jsr    putfirst
  68.     jsr    prtbnd
  69.     jsr    prtlev
  70.     lea     putsp,a0
  71.     jsr     putvbl
  72. *    jsr    putrout
  73.     lea    prtscr,a0
  74.     jsr    putvbl
  75.     lea    zball,a0
  76.     jsr    putvbl
  77.     lea    ghost,a0
  78.     jsr    putvbl
  79.     move.w    #1,$452
  80.     move.w    #178,bally
  81. *    jsr     colors
  82. start:    jsr    wait2
  83.     jsr    testd
  84. tst:
  85. *    jsr    testd
  86.     jsr    fin
  87.     jsr    ballout
  88.     jsr    quick
  89.     jsr    stick
  90. *    jsr    pause
  91.         jmp     tst
  92.  
  93. testd:    move.w    #24000,d5
  94. td:    nop
  95.     dbf    d5,td
  96.     rts
  97.  
  98. *********************pause and jump***************
  99. pause:    clr.l    d0
  100.     move.l    kkk,a1
  101.     move.b    (a1),d0
  102.     btst    #7,d0
  103.     bne    pausehome
  104.     move.b    2(a1),d0
  105.     btst    #7,d0
  106.     bne    pausehome
  107.     cmpi.b    #127,d0
  108.     bgt    pausehome
  109.     cmpi.b    #1,d0
  110.     bne    pausehome
  111.     move.w    #0,$452
  112. pa1:    clr.l    d0
  113.     move.b    (a1),d0
  114.     btst    #7,d0
  115.     bne    pa1
  116.     move.b    2(a1),d0
  117.     btst    #7,d0
  118.     bne    pa1
  119.     cmpi.b    #127,d0
  120.     bgt    pa1
  121.     cmpi.b    #114,d0
  122.     beq    jumplev
  123.     move.w    #1,$452
  124.     rts
  125.  
  126. jumplev:rts
  127.  
  128.  
  129. pausehome:
  130.     rts
  131. ********************vbi to pulse red**************
  132. pulse:    move.w    pdelay,d0
  133.     tst.w    d0
  134.     bge    pback
  135.     clr.l    d0
  136.     move.w    count,d0
  137.     move.l    #redcol,a1
  138.     move.w    (a1,d0),$ff8258
  139.     cmpi.w    #10,count
  140.     blt    pback2
  141.     move.w    #0,count
  142.     rts
  143. pback2:    addq.w    #2,count
  144.     move.w    #8,pdelay
  145.     rts    
  146. pback:    subq.w    #1,pdelay
  147.     rts
  148.  
  149. *********************stick to bat*******************
  150. stick:    move.w    catches,d0
  151.     tst.w    d0
  152.     bmi    sthome
  153.     cmpi.w    #175,bally
  154.     ble    sthome
  155.     move.w    mx,d0
  156.     cmp.w    ballx,d0
  157.     bgt    sthome
  158.     addi.w    #32,d0
  159.     cmp.w    ballx,d0
  160.     blt    sthome    
  161.     cmpi.w    #2,buttondat
  162.     bne    sthome
  163. st:    cmpi.w    #2,buttondat
  164.     bne    sthome2
  165.     move.w    #0,xvel
  166.     move.w    #0,yvel
  167.     move.w    mx,d0
  168.     addi.w    #12,d0
  169.     move.w    d0,ballx
  170.     bra    st
  171. sthome2:move.w    #2,xvel
  172.     move.w    #-2,yvel
  173.     subq.w    #1,catches
  174.     rts
  175. sthome:    rts
  176.  
  177. *********************test if ball should go faster**********
  178. quick:    move.w    buttondat,d1
  179.     cmpi.w    #1,d1
  180.     beq    qhome
  181.     rts
  182. qhome:    move.w    #1,fast
  183.     rts
  184. *************ball out***************
  185. ballout:move.w    outflg,d0
  186.     tst.w    d0
  187.     bmi    outback
  188.     move.w    #0,xvel
  189.     move.w    #0,yvel
  190.     move.w    #178,bally
  191.     move.w    #-1,fast
  192.     jsr    testd
  193.     move.w    #0,$452
  194.     move.l    #boom,-(sp)
  195.     move.w    #32,-(sp)
  196.     trap    #14
  197.     addq.l    #6,sp
  198.     move.w    #13,d0
  199.     move.l    #boomcol,a0
  200.     move.l    #$ff8240,a1
  201. bc:    move.w    (a0)+,(a1)
  202.     jsr    boomdel
  203.     dbf    d0,bc
  204.     subq.w    #1,bound
  205.     move.w    bound,d0
  206.     tst.w    d0
  207.     bmi    playerdead
  208.     jsr    prtbnd
  209.     move.w    #1,$452
  210.     jsr    wait2
  211.     move.w    #-1,outflg
  212. outback:rts
  213. boomdel:move.w    #50000,d5
  214. bd1:    nop
  215.     dbf    d5,bd1
  216.     rts
  217.  
  218. ******************wait two**************
  219. wait2:    move.w    buttondat,d0
  220.     tst.w    d0
  221.     bgt    w2home
  222.     move.w    mx,d0
  223.     addi.w    #12,d0
  224.     move.w    d0,ballx
  225.     bra    wait2
  226. w2home:    move.w    #2,xvel
  227.     move.w    #-2,yvel
  228.     rts
  229.  
  230.  
  231. ****************player dead*******************
  232. playerdead:
  233.         move.w  #-1,ynflg       
  234.     move.w    #-1,bynflg
  235.     move.w    #-1,outflg
  236.     move.w    #-1,gynflg
  237.     move.w    #178,bally
  238.     move.w    #150,ballx
  239.     move.l    safe,ghostad
  240.     move.w    #-1,current
  241.     move.w    #-1,fast
  242.     move.w    #0,nbrks
  243.     move.w    #0,nrem
  244.     move.w    #1,plev
  245.     move.w    #4,bound
  246.     move.w    #-1,brick
  247.     move.w    #-1,brtimes
  248.     move.w    #0,xvel
  249.     move.w    #0,lev
  250.     move.w    #0,yvel
  251.     move.w    #150,bbx
  252.     move.w    #97,bby
  253.     move.l    screen3,which
  254.     jsr    copysc
  255.     jsr    prtscr
  256.     jsr    wait
  257.     move.l    screen2,which
  258.     move.w    #0,score
  259.     jsr    copysc
  260.     jsr    prtlev
  261.     jsr    prtbnd
  262.     jsr    putfirst
  263.     move.w    #1,$452
  264.     jsr    wait2
  265.     bra    start
  266. *******************all bricks dead?*************
  267. fin:    move.w    nbrks,d0
  268.     move.w    nrem,d1
  269.     cmp.w    d0,d1
  270.     blt    finback
  271. *    move.w    #-1,gynflg
  272.     move.w    #192,ghosty
  273.     move.w    #0,xvel
  274.     move.w    #0,yvel
  275.     move.w    #178,bally
  276.     addq.w    #1,plev
  277.     jsr    testd
  278.     move.w    #0,$452
  279.     jsr    prtlev
  280.     addq.w    #4,lev
  281.     move.w    #-1,fast
  282.     jsr    putfirst
  283.     move.w    #1,$452
  284.     jsr    wait2
  285.     move.w    #0,nrem
  286.     rts
  287.  
  288. finback:rts
  289.  
  290.  
  291.  
  292. ******************remove a brick******************
  293. rembrick:
  294.     move.w    #-1,brtimes
  295.     addi.w    #2,score
  296.     clr.l    d4
  297.     clr.l    d5
  298.     move.w    bbx,d5
  299.     move.w    bby,d4
  300.     divu    #16,d5
  301.     divu    #8,d4
  302.     mulu    #16,d5        ;x
  303.     mulu    #8,d4        ;y
  304.     move.w    current,d0
  305.     tst.w    d0
  306.     bge    rr1
  307.     clr.l    d0
  308.     move.w    #17,-(sp)
  309.     trap    #14
  310.     addq.l    #2,sp
  311.     asr.l    #8,d0
  312.     cmpi.l    #4500,d0
  313.     bgt    rr1
  314.     move.w    d4,ghosty
  315.     move.w    d5,ghostx
  316.     addi.w    #32,ghosty
  317.     move.w    #1,current
  318. rr1:    mulu    #160,d4
  319.     divu    #16,d5
  320.     mulu    #8,d5
  321.     add.w    d5,d4
  322.     add.l    screen,d4
  323.     move.l    d4,a2
  324. rembr:    move.w  #8,d6        ;copy height to d1
  325.         subq.w  #1,d6        ;height - 1 = height if count starts at zero
  326. rem1:    move.w    #0,d7        ;copy width to d0
  327. rem0:    move.l  #0,(a2)+    ;move all four planes
  328.         move.l  #0,(a2)+    ;(2 longs = 4 words(planes))
  329.         dbf     d7,rem0        ;repeat width times
  330.         add.l   #152,a2        ;move pointer to next line
  331.         dbf     d6,rem1        ;repeat height times
  332. remhome:rts
  333.  
  334.  
  335.  
  336. ******************two hit brick******************
  337. tbrick:    move.w    thbrick,d0
  338.     tst.w    d0
  339.     bmi    thhome
  340.     addi.w    #2,score
  341.     move.w    bbx,d2
  342.     move.w    bby,d1
  343.     divu    #16,d2
  344.     divu    #8,d1
  345.     mulu    #16,d2
  346.     mulu    #8,d1
  347.     mulu    #160,d1
  348.     divu    #16,d2
  349.     mulu    #8,d2
  350.     add.w    d2,d1
  351.     add.l    screen,d1
  352.     move.l    d1,a2
  353.     move.l    d1,bad2
  354.     move.w    #8,brtimes
  355.     move.l    #bricks,a1
  356.     addi.l    #128,a1
  357.     move.l    a1,bad
  358.     move.w    #-1,thbrick
  359. thhome:    rts
  360. *******************brick flash***************
  361.     
  362. bflash:    move.w    brtimes,d5    
  363.     tst.w    d5
  364.     bmi    nearth
  365.     move.w  #8,d6        ;copy height to d1
  366.         subq.w  #1,d6        ;height - 1 = height if count starts at zero
  367.     move.l    bad2,a2    
  368.     move.l    bad,a1
  369. th1:    move.w    #0,d7        ;copy width to d0
  370. th0:    move.l  (a1)+,(a2)+    ;move all four planes
  371.         move.l  (a1)+,(a2)+    ;(2 longs = 4 words(planes))
  372.         dbf     d7,th0        ;repeat width times
  373.         add.l   #152,a2        ;move pointer to next line
  374.         dbf     d6,th1        ;repeat height times
  375.     move.l    a1,bad
  376.     subq.w    #1,d5
  377.     move.w    d5,brtimes
  378.     tst.w    d5
  379.     bmi    nearth
  380.     rts
  381. nearth:    rts
  382.  
  383.  
  384.  
  385.  
  386. ************************put the first bricks****************
  387. putfirst:
  388.     move.w    #5,catches
  389.     move.l    #pattern,a0    
  390.     clr.l    d0
  391.     move.w    lev,d0
  392.     move.l    (a0,d0),a1    ;gives addr of pattern data
  393. pf1:    move.w    (a1)+,$ff825a    ;colors of bricks
  394.     move.w    (a1)+,$ff825c
  395.     move.w    (a1)+,d0    ;number of bricks in pattern
  396.     move.w    d0,nbrks
  397.     addq.w    #1,nbrks
  398.     move.w    (a1)+,a6
  399. pf2:    movem.l    d0-d7/a0-a6,-(a7)
  400.     move.l    #hitbat,-(sp)
  401.     move.w    #32,-(sp)
  402.     trap    #14
  403.     addq.l    #6,sp    
  404.     movem.l    (a7)+,d0-d7/a0-a6
  405.     move.w    (a1)+,d1    ;first brick
  406.     mulu    #2,d1        
  407.     move.l    #adds,a0    ;screen addresses
  408.     move.w    (a0,d1),a2    ;address of brick
  409.     add.l    screen,a2
  410.  
  411. fillbr:    move.w  #8,d6        ;copy height to d1
  412.         subq.w  #1,d6        ;height - 1 = height if count starts at zero
  413.         move.l    #bricks,a0    ;shifted sprite address
  414.     adda.l    a6,a0
  415.  
  416. fill1:    move.w    #0,d7        ;copy width to d0
  417. fill0:    move.l  (a0)+,(a2)+    ;move all four planes
  418.         move.l  (a0)+,(a2)+    ;(2 longs = 4 words(planes))
  419.         dbf     d7,fill0    ;repeat width times
  420.         add.l   #152,a2        ;move pointer to next line
  421.         dbf     d6,fill1    ;repeat height times
  422.     jsr    testd
  423.     dbf    d0,pf2
  424.     rts    
  425.     
  426.  
  427. ***************************************
  428. ball:
  429.     jsr    pulse
  430.     jsr    bflash
  431.     move.w    xvel,d0
  432.     move.w    yvel,d1
  433.     add.w    d1,bally
  434.     add.w    d0,ballx
  435.     move.w    bally,d2
  436.     cmpi.w    #190,d2
  437.     bge    bllout
  438.         move.w  ballx,block
  439.         move.w  bally,block+2
  440.         move.w  #$7,block+4
  441.         move.w  #$1,block+6
  442.         move.l  #ballsp,block+8
  443.         move.l  #balltemp,block+12
  444.         move.l  screen,block+16
  445.         move.w  #$1,block+26
  446.         move.l  ballad,block+30
  447.     move.l    #ballad,block+34
  448.     move.w    bynflg,d0
  449.     tst.w    d0
  450.     bmi    cbalc
  451. cblr1:    move.w  block+4,d1        ;copy height to d1
  452.     subq.w  #1,d1           ;height - 1 = height if count starts at zero
  453.         move.l  block+12,a0      ;shifted sprite address
  454. cblr2:    move.w  block+6,d0        ;copy width to d0
  455.         move.l  block+30,a1       ;absolute screen address to a1
  456.         move.l  block+30,d6
  457. cblr3:    move.l  (a0)+,d3        ;move all four planes
  458.         eor.l   d3,(a1)+
  459.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  460.         eor.l   d3,(a1)+
  461.         dbf     d0,cblr3         ;repeat width times
  462.         add.l   #160,block+30     ;move pointer to next line
  463.         dbf     d1,cblr2         ;repeat height times
  464.         move.l  d6,block+30
  465. cba:    move.l    ptsin,a6
  466.     move.w    xvel,d0
  467.     move.w    yvel,d1
  468.     move.w    ballx,(a6)
  469.     move.w    bally,2(a6)
  470.     add.w    d0,(a6)
  471.     add.w    d1,2(a6)
  472.     addq.w    #2,(a6)
  473.     subq.w    #1,2(a6)
  474.     dc.w    getpix
  475.     tst.w    d0
  476.     ble    c1
  477.     neg    yvel
  478.     jsr    hit
  479. c1:    addq.w    #3,(a6)
  480.     addq.w    #3,2(a6)
  481.     dc.w    getpix
  482.     tst.w    d0
  483.     ble    c2
  484.     neg    xvel
  485.     jsr    hit
  486. c2:    addq.w    #3,2(a6)
  487.     subq.w    #3,(a6)
  488.     dc.w    getpix
  489.     tst.w    d0
  490.     ble    c3
  491.     neg    yvel
  492.     jsr    hit
  493. c3:    subq.w    #3,(a6)
  494.     subq.w    #3,2(a6)
  495.     dc.w    getpix
  496.     tst.w    d0
  497.     ble    cbalc
  498.     neg    xvel
  499.     jsr    hit
  500.     bra    cbalc
  501. hit:    cmpi.w    #2,d0        ;hit a two hit brick
  502.     bne    hit1
  503.     move.w    (a6),bbx
  504.     move.w    2(a6),bby
  505.     move.w    #1,thbrick
  506.     move.l    #hitbr2,-(sp)
  507.     move.w    #32,-(sp)
  508.     trap    #14
  509.     jsr    tbrick
  510.     addq.l    #6,sp
  511.     rts
  512. hit1:    cmpi.w    #13,d0        ;hit a normal brick
  513.     blt    hit2
  514.     move.w    (a6),bbx
  515.     move.w    2(a6),bby
  516.     move.l    #hitbr,-(sp)
  517.     move.w    #32,-(sp)
  518.     trap    #14
  519.     addq.l    #6,sp
  520.     addq.w    #1,nrem
  521.     jsr    rembrick
  522.     rts
  523. hit2:    cmpi.w    #12,d0        ;hit red bat
  524.     bne    hit3
  525.     move.l    #hitbat,-(sp)
  526.     move.w    #32,-(sp)
  527.     trap    #14
  528.     addq.l    #6,sp
  529.     move.w    xvel,d1
  530.     tst.w    d1
  531.     bmi    hitneg
  532.     move.w    #4,xvel
  533.     rts
  534. hitneg:    move.w    #-4,xvel
  535.     rts
  536. hit3:    cmpi.w    #11,d0
  537.     bne    hit4
  538.     move.l    #hitbat,-(sp)
  539.     move.w    #32,-(sp)
  540.     trap    #14
  541.     addq.l    #6,sp
  542.     move.w    xvel,d1
  543.     tst.w    d1
  544.     bmi    hitneg2
  545.     move.w    #2,xvel
  546.     rts
  547. hitneg2:move.w    #-2,xvel
  548.     rts
  549. hit4:    move.l    #hitbat,-(sp)
  550.     move.w    #32,-(sp)
  551.     trap    #14
  552.     addq.l    #6,sp
  553.     rts
  554.  
  555.  
  556. cbalc:    move.w    #1,bynflg
  557.     clr.l   d0
  558.         move.w  block,d0       ;put x value in d0
  559.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  560.         move.w  block+2,d1     ;put y value in d1
  561.         mulu    #160,d1         ;gives offset in words of line
  562.         move.w  d0,d3
  563.         mulu    #8,d3
  564.         add     d3,d1           ;gives word to poke sprite
  565.         move.l  block+16,d2    ;put screen address in d2
  566.         add     d1,d2           ;gives actual screen address for sprite
  567.     move.l    block+34,a0
  568.         move.l  d2,(a0)
  569.         move.l  d2,block+20
  570.         asr.l   #8,d0
  571.         asr.l   #8,d0           ;leaves x offset in d0          
  572.         move.w  d0,block+24
  573.  
  574.  
  575. *************CODE TO ROTATE A SPRITE IMAGE***********************
  576. *       parameters to be passed on the stack in order are       *       
  577. *       1-      x offset from start of word                     *
  578. *       2-      address of place to put shifted image(tempsp)   *
  579. *       3-      address of sprite data                          *
  580. *       4-      height of object in pixels                      *
  581. *       5-      width of object in words - 1                    *
  582. *****************************************************************
  583. bshiftimage:
  584.         move.w  block+4,d1        ;height in d1
  585.         move.w  block+24,d2       ;offset to d2
  586.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  587.         subq.w  #1,block+6        ;width - 1 = width if count starts at zero
  588.         move.l  block+8,a0        ;object pointer to a0
  589.         move.l  block+12,a1       ;image pointer to a1
  590. sbi1:   move.w  block+6,d0        ;width in d0
  591.         clr.l   (a1)            ;for each line, the first word of the
  592.         clr.l   4(a1)           ;image must be cleared
  593. sbi0:   clr.l   d4              ;make sure that the top halves of these
  594.         clr.l   d5              ;registers are zeroed out
  595.         clr.l   d6
  596.         clr.l   d7
  597.         move.w  (a0)+,d4        ;load in one word (four planes)
  598.         move.w  (a0)+,d5        ;to be rotated
  599.         move.w  (a0)+,d6
  600.         move.w  (a0)+,d7
  601.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  602.         ror.l   d2,d5
  603.         ror.l   d2,d6
  604.         ror.l   d2,d7
  605.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  606.         or.w    d5,(a1)+        ;stored by move instructions farther
  607.         or.w    d6,(a1)+        ;down in this routine
  608.         or.w    d7,(a1)+
  609.         swap    d4              ;move high order bits into lower halves
  610.         swap    d5              ;of the registers
  611.         swap    d6
  612.         swap    d7
  613.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  614.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  615.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  616.         move.w  d7,6(a1)        ;the same addresses as these moves.
  617.         dbf     d0,sbi0          ;repeat width times
  618.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  619.         dbf     d1,sbi1          ;repeat height times
  620.         addi.w  #1,block+6
  621.  
  622. *********code to put sprite on screen********************
  623. *********parameters to be passed on the stack are********
  624. *********1-     shifted sprite address (tempsp) *********
  625. *********2-     absolute screen address to put image*****
  626. *********3-     height in pixels                *********
  627. *********4-     width in words -1               *********
  628.  
  629. pbotsp:    move.w  block+4,d1     ;copy height to d1
  630.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  631.         move.l  block+12,a0    ;shifted sprite address
  632. rbs1:    move.w block+26,d0     ;copy width to d0
  633.         move.l  block+20,a1    ;absolute screen address to a1
  634.         move.l  block+20,d6
  635. rbs0:    move.l  (a0)+,d2    ;move all four planes
  636.         eor.l   d2,(a1)+
  637.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  638.         eor.l   d2,(a1)+
  639.         dbf     d0,rbs0          ;repeat width times
  640.         add.l   #160,block+20  ;move pointer to next line
  641.         dbf     d1,rbs1          ;repeat height times
  642.         move.l  d6,block+20
  643. bdone:    rts                     ;done
  644.  
  645.  
  646. bllout:move.w    #1,outflg
  647.     rts
  648.  
  649. ***************************************
  650. ghost:    move.w    current,d0
  651.     tst.w    d0
  652.     bmi    gdone    
  653.     addq.w    #2,ghosty
  654.         move.w  ghostx,gblock
  655.         move.w  ghosty,gblock+2
  656.         move.w  #$8,gblock+4
  657.         move.w  #$1,gblock+6
  658.         move.l  #ghostbr,gblock+8
  659.         move.l  #ghosttemp,gblock+12
  660.         move.l  screen,gblock+16
  661.         move.w  #$1,gblock+26
  662.         move.l  ghostad,gblock+30
  663.     move.l    #ghostad,gblock+34
  664.     move.w    gynflg,d0
  665.     tst.w    d0
  666.     bmi    gcalc
  667. gblr1:    move.w  gblock+4,d1        ;copy height to d1
  668.     subq.w  #1,d1           ;height - 1 = height if count starts at zero
  669.         move.l  gblock+12,a0      ;shifted sprite address
  670. gblr2:    move.w  gblock+6,d0        ;copy width to d0
  671.         move.l  gblock+30,a1       ;absolute screen address to a1
  672.         move.l  gblock+30,d6
  673. gblr3:    move.l  (a0)+,d3        ;move all four planes
  674.         eor.l   d3,(a1)+
  675.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  676.         eor.l   d3,(a1)+
  677.         dbf     d0,gblr3         ;repeat width times
  678.         add.l   #160,gblock+30     ;move pointer to next line
  679.         dbf     d1,gblr2         ;repeat height times
  680.         move.l  d6,gblock+30
  681.     move.w    ghosty,d2
  682.     cmpi.w    #190,d2
  683.     bge    ghostout
  684.  
  685. ghit:    move.l    ptsin,a5
  686.     move.w    ghosty,2(a5)
  687.     move.w    ghostx,(a5)
  688.     addi.w    #12,2(a5)
  689.     dc.w    getpix
  690.     cmpi.w    #8,d0
  691.     ble    ghit2
  692.     cmpi.w    #13,d0
  693.     bge    ghit2
  694.     move.w    #-1,current
  695.     move.w    #-1,gynflg
  696.     bra    gout2
  697. ghit2:    addq.w    #4,(a5)
  698.     dc.w    getpix
  699.     cmpi.w    #8,d0
  700.     ble    ghit3
  701.     cmpi.w    #13,d0
  702.     bge    ghit3
  703.     move.w    #-1,current
  704.     move.w    #-1,gynflg
  705.     bra    gout2
  706.     
  707. ghit3:    addq.w    #4,(a5)
  708.     dc.w    getpix
  709.     cmpi.w    #8,d0
  710.     ble    ghit4
  711.     cmpi.w    #13,d0
  712.     bge    ghit4
  713.     move.w    #-1,current
  714.     move.w    #-1,gynflg
  715.     bra    gout2
  716.  
  717. ghit4:    addq.w    #4,(a5)
  718.     dc.w    getpix
  719.     cmpi.w    #8,d0
  720.     ble    gcalc
  721.     cmpi.w    #13,d0
  722.     bge    gcalc
  723.     move.w    #-1,current
  724.     move.w    #-1,gynflg
  725.     bra    gout2
  726.  
  727. gcalc:    move.w    #1,gynflg
  728.     clr.l   d0
  729.         move.w  gblock,d0       ;put x value in d0
  730.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  731.         move.w  gblock+2,d1     ;put y value in d1
  732.         mulu    #160,d1         ;gives offset in words of line
  733.         move.w  d0,d3
  734.         mulu    #8,d3
  735.         add     d3,d1           ;gives word to poke sprite
  736.         move.l  gblock+16,d2    ;put screen address in d2
  737.         add     d1,d2           ;gives actual screen address for sprite
  738.     move.l    gblock+34,a0
  739.         move.l  d2,(a0)
  740.         move.l  d2,gblock+20
  741.         asr.l   #8,d0
  742.         asr.l   #8,d0           ;leaves x offset in d0          
  743.         move.w  d0,gblock+24
  744.  
  745.  
  746. *************CODE TO ROTATE A SPRITE IMAGE***********************
  747. *       parameters to be passed on the stack in order are       *       
  748. *       1-      x offset from start of word                     *
  749. *       2-      address of place to put shifted image(tempsp)   *
  750. *       3-      address of sprite data                          *
  751. *       4-      height of object in pixels                      *
  752. *       5-      width of object in words - 1                    *
  753. *****************************************************************
  754. gshiftimage:
  755.         move.w  gblock+4,d1        ;height in d1
  756.         move.w  gblock+24,d2       ;offset to d2
  757.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  758.         subq.w  #1,gblock+6        ;width - 1 = width if count starts at zero
  759.         move.l  gblock+8,a0        ;object pointer to a0
  760.         move.l  gblock+12,a1       ;image pointer to a1
  761. gsbi1:   move.w  gblock+6,d0        ;width in d0
  762.         clr.l   (a1)            ;for each line, the first word of the
  763.         clr.l   4(a1)           ;image must be cleared
  764. gsbi0:   clr.l   d4              ;make sure that the top halves of these
  765.         clr.l   d5              ;registers are zeroed out
  766.         clr.l   d6
  767.         clr.l   d7
  768.         move.w  (a0)+,d4        ;load in one word (four planes)
  769.         move.w  (a0)+,d5        ;to be rotated
  770.         move.w  (a0)+,d6
  771.         move.w  (a0)+,d7
  772.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  773.         ror.l   d2,d5
  774.         ror.l   d2,d6
  775.         ror.l   d2,d7
  776.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  777.         or.w    d5,(a1)+        ;stored by move instructions farther
  778.         or.w    d6,(a1)+        ;down in this routine
  779.         or.w    d7,(a1)+
  780.         swap    d4              ;move high order bits into lower halves
  781.         swap    d5              ;of the registers
  782.         swap    d6
  783.         swap    d7
  784.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  785.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  786.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  787.         move.w  d7,6(a1)        ;the same addresses as these moves.
  788.         dbf     d0,gsbi0          ;repeat width times
  789.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  790.         dbf     d1,gsbi1          ;repeat height times
  791.         addi.w  #1,gblock+6
  792.  
  793. *********code to put sprite on screen********************
  794. *********parameters to be passed on the stack are********
  795. *********1-     shifted sprite address (tempsp) *********
  796. *********2-     absolute screen address to put image*****
  797. *********3-     height in pixels                *********
  798. *********4-     width in words -1               *********
  799.  
  800. gpotsp:    move.w  gblock+4,d1     ;copy height to d1
  801.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  802.         move.l  gblock+12,a0    ;shifted sprite address
  803. grbs1:    move.w gblock+26,d0     ;copy width to d0
  804.         move.l  gblock+20,a1    ;absolute screen address to a1
  805.         move.l  gblock+20,d6
  806. grbs0:    move.l  (a0)+,d2    ;move all four planes
  807.         eor.l   d2,(a1)+
  808.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  809.         eor.l   d2,(a1)+
  810.         dbf     d0,grbs0          ;repeat width times
  811.         add.l   #160,gblock+20  ;move pointer to next line
  812.         dbf     d1,grbs1          ;repeat height times
  813.         move.l  d6,gblock+20
  814. gdone:    rts                     ;done
  815.  
  816.  
  817. ghostout:
  818.     move.l    safe,ghostad
  819.     move.w    #1,goutflg
  820.     move.w    #-1,current
  821.     rts
  822. gout2:    move.l    safe,ghostad
  823.     addi.w    #25,score
  824.     rts
  825.  
  826.  
  827. ***************************************
  828. zball:    move.w    fast,d0
  829.     tst.w    d0
  830.     bmi    zbdone
  831.     move.w    xvel,d0
  832.     move.w    yvel,d1
  833.     add.w    d1,bally
  834.     add.w    d0,ballx
  835.     move.w    bally,d2
  836.     cmpi.w    #190,d2
  837.     bge    zbllout
  838.         move.w  ballx,block
  839.         move.w  bally,block+2
  840.         move.w  #$7,block+4
  841.         move.w  #$1,block+6
  842.         move.l  #ballsp,block+8
  843.         move.l  #balltemp,block+12
  844.         move.l  screen,block+16
  845.         move.w  #$1,block+26
  846.         move.l  ballad,block+30
  847.     move.l    #ballad,block+34
  848.     move.w    bynflg,d0
  849.     tst.w    d0
  850.     bmi    zcbalc
  851. zcblr1:    move.w  block+4,d1        ;copy height to d1
  852.     subq.w  #1,d1           ;height - 1 = height if count starts at zero
  853.         move.l  block+12,a0      ;shifted sprite address
  854. zcblr2:    move.w  block+6,d0        ;copy width to d0
  855.         move.l  block+30,a1       ;absolute screen address to a1
  856.         move.l  block+30,d6
  857. zcblr3:    move.l  (a0)+,d3        ;move all four planes
  858.         eor.l   d3,(a1)+
  859.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  860.         eor.l   d3,(a1)+
  861.         dbf     d0,zcblr3         ;repeat width times
  862.         add.l   #160,block+30     ;move pointer to next line
  863.         dbf     d1,zcblr2         ;repeat height times
  864.         move.l  d6,block+30
  865.     jsr    bflash
  866. zcba:    move.l    ptsin,a6
  867.     move.w    xvel,d0
  868.     move.w    yvel,d1
  869.     move.w    ballx,(a6)
  870.     move.w    bally,2(a6)
  871.     add.w    d0,(a6)
  872.     add.w    d1,2(a6)
  873.     addq.w    #2,(a6)
  874.     subq.w    #1,2(a6)
  875.     dc.w    getpix
  876.     tst.w    d0
  877.     ble    zc1
  878.     neg    yvel
  879.     jsr    zhit
  880. zc1:    addq.w    #3,(a6)
  881.     addq.w    #3,2(a6)
  882.     dc.w    getpix
  883.     tst.w    d0
  884.     ble    zc2
  885.     neg    xvel
  886.     jsr    zhit
  887. zc2:    addq.w    #3,2(a6)
  888.     subq.w    #3,(a6)
  889.     dc.w    getpix
  890.     tst.w    d0
  891.     ble    zc3
  892.     neg    yvel
  893.     jsr    zhit
  894. zc3:    subq.w    #3,(a6)
  895.     subq.w    #3,2(a6)
  896.     dc.w    getpix
  897.     tst.w    d0
  898.     ble    zcbalc
  899.     neg    xvel
  900.     jsr    zhit
  901.     bra    zcbalc
  902. zhit:    cmpi.w    #2,d0        ;hit a two hit brick
  903.     bne    zhit1
  904.     move.w    (a6),bbx
  905.     move.w    2(a6),bby
  906.     move.w    #1,thbrick
  907.     move.l    #hitbr2,-(sp)
  908.     move.w    #32,-(sp)
  909.     trap    #14
  910.     jsr    tbrick
  911.     addq.l    #6,sp
  912.     rts
  913. zhit1:    cmpi.w    #13,d0        ;hit a normal brick
  914.     blt    zhit2
  915.     move.w    (a6),bbx
  916.     move.w    2(a6),bby
  917.     move.l    #hitbr,-(sp)
  918.     move.w    #32,-(sp)
  919.     trap    #14
  920.     addq.l    #6,sp
  921.     addq.w    #1,nrem
  922.     jsr    rembrick
  923.     rts
  924. zhit2:    cmpi.w    #12,d0
  925.     bne    zhit3
  926.     move.l    #hitbat,-(sp)
  927.     move.w    #32,-(sp)
  928.     trap    #14
  929.     addq.l    #6,sp
  930.     move.w    xvel,d1
  931.     tst.w    d1
  932.     bmi    zhitneg
  933.     move.w    #3,xvel
  934.     rts
  935. zhitneg:move.w    #-3,xvel
  936.     rts
  937. zhit3:    cmpi.w    #11,d0
  938.     bne    zhit4
  939.     move.l    #hitbat,-(sp)
  940.     move.w    #32,-(sp)
  941.     trap    #14
  942.     addq.l    #6,sp
  943.     move.w    xvel,d1
  944.     tst.w    d1
  945.     bmi    zhitneg2
  946.     move.w    #2,xvel
  947.     rts
  948. zhitneg2:move.w    #-2,xvel
  949.     rts
  950. zhit4:    move.l    #hitbat,-(sp)
  951.     move.w    #32,-(sp)
  952.     trap    #14
  953.     addq.l    #6,sp
  954.     rts
  955.  
  956.  
  957. zcbalc:    move.w    #1,bynflg
  958.     clr.l   d0
  959.         move.w  block,d0       ;put x value in d0
  960.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  961.         move.w  block+2,d1     ;put y value in d1
  962.         mulu    #160,d1         ;gives offset in words of line
  963.         move.w  d0,d3
  964.         mulu    #8,d3
  965.         add     d3,d1           ;gives word to poke sprite
  966.         move.l  block+16,d2    ;put screen address in d2
  967.         add     d1,d2           ;gives actual screen address for sprite
  968.     move.l    block+34,a0
  969.         move.l  d2,(a0)
  970.         move.l  d2,block+20
  971.         asr.l   #8,d0
  972.         asr.l   #8,d0           ;leaves x offset in d0          
  973.         move.w  d0,block+24
  974.  
  975.  
  976. *************CODE TO ROTATE A SPRITE IMAGE***********************
  977. *       parameters to be passed on the stack in order are       *       
  978. *       1-      x offset from start of word                     *
  979. *       2-      address of place to put shifted image(tempsp)   *
  980. *       3-      address of sprite data                          *
  981. *       4-      height of object in pixels                      *
  982. *       5-      width of object in words - 1                    *
  983. *****************************************************************
  984. zbshiftimage:
  985.         move.w  block+4,d1        ;height in d1
  986.         move.w  block+24,d2       ;offset to d2
  987.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  988.         subq.w  #1,block+6        ;width - 1 = width if count starts at zero
  989.         move.l  block+8,a0        ;object pointer to a0
  990.         move.l  block+12,a1       ;image pointer to a1
  991. zsbi1:   move.w  block+6,d0        ;width in d0
  992.         clr.l   (a1)            ;for each line, the first word of the
  993.         clr.l   4(a1)           ;image must be cleared
  994. zsbi0:   clr.l   d4              ;make sure that the top halves of these
  995.         clr.l   d5              ;registers are zeroed out
  996.         clr.l   d6
  997.         clr.l   d7
  998.         move.w  (a0)+,d4        ;load in one word (four planes)
  999.         move.w  (a0)+,d5        ;to be rotated
  1000.         move.w  (a0)+,d6
  1001.         move.w  (a0)+,d7
  1002.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  1003.         ror.l   d2,d5
  1004.         ror.l   d2,d6
  1005.         ror.l   d2,d7
  1006.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  1007.         or.w    d5,(a1)+        ;stored by move instructions farther
  1008.         or.w    d6,(a1)+        ;down in this routine
  1009.         or.w    d7,(a1)+
  1010.         swap    d4              ;move high order bits into lower halves
  1011.         swap    d5              ;of the registers
  1012.         swap    d6
  1013.         swap    d7
  1014.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  1015.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  1016.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  1017.         move.w  d7,6(a1)        ;the same addresses as these moves.
  1018.         dbf     d0,zsbi0          ;repeat width times
  1019.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  1020.         dbf     d1,zsbi1          ;repeat height times
  1021.         addi.w  #1,block+6
  1022.  
  1023. *********code to put sprite on screen********************
  1024. *********parameters to be passed on the stack are********
  1025. *********1-     shifted sprite address (tempsp) *********
  1026. *********2-     absolute screen address to put image*****
  1027. *********3-     height in pixels                *********
  1028. *********4-     width in words -1               *********
  1029.  
  1030. zpbotsp:move.w  block+4,d1     ;copy height to d1
  1031.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1032.         move.l  block+12,a0    ;shifted sprite address
  1033. zrbs1:    move.w block+26,d0     ;copy width to d0
  1034.         move.l  block+20,a1    ;absolute screen address to a1
  1035.         move.l  block+20,d6
  1036. zrbs0:    move.l  (a0)+,d2    ;move all four planes
  1037.         eor.l   d2,(a1)+
  1038.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  1039.         eor.l   d2,(a1)+
  1040.         dbf     d0,zrbs0          ;repeat width times
  1041.         add.l   #160,block+20  ;move pointer to next line
  1042.         dbf     d1,zrbs1          ;repeat height times
  1043.         move.l  d6,block+20
  1044. zbdone:    rts                     ;done
  1045.  
  1046.  
  1047. zbllout:move.w    #1,outflg
  1048.     rts
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056. ***********************fancy clear screen****************
  1057. clearsc:move.l  #99,d0
  1058.         move.l  screen,a0
  1059. cl1:    move.w  #159,d1
  1060. cl2:    move.w  #0,(a0)+
  1061.         dbf     d1,cl2
  1062.         addi.l  #160,a0
  1063.         jsr     cldel
  1064.         dbf     d0,cl1
  1065.         move.w  #99,d0
  1066.         move.l  screen,a0
  1067.         addi.l  #160,a0
  1068. cl3:    move.w  #159,d1
  1069. cl4:    move.w  #0,(a0)+
  1070.         dbf     d1,cl4
  1071.         addi.l  #160,a0
  1072.         jsr     cldel
  1073.         dbf     d0,cl3
  1074.         rts
  1075.  
  1076.  
  1077. cldel:  move.w  #3000,d2
  1078. cdel1:  nop
  1079.         dbf     d2,cdel1
  1080.         rts
  1081. ********************fancy copy screen*************
  1082. copysc: move.w  #99,d0
  1083.         move.l  screen,a0
  1084.         move.l  which,a1
  1085. cop1:   move.w  #159,d1
  1086. cop2:   move.w  (a1)+,(a0)+
  1087.         dbf     d1,cop2
  1088.         addi.l  #160,a0
  1089.         addi.l  #160,a1
  1090.         jsr     cldel
  1091.         dbf     d0,cop1
  1092.         move.w  #99,d0
  1093.         move.l  screen,a0
  1094.         addi.l  #160,a0
  1095.         move.l  which,a1
  1096.         addi.l  #160,a1
  1097. cop3:   move.w  #159,d1
  1098. cop4:   move.w  (a1)+,(a0)+
  1099.         dbf     d1,cop4
  1100.         addi.l  #160,a0
  1101.         addi.l  #160,a1
  1102.         jsr     cldel
  1103.         dbf     d0,cop3
  1104.         rts
  1105. **********************routine to print a dec nuber*************
  1106. prtlev:
  1107.  
  1108.         move.l  #0,d7
  1109.         move.w  plev,d7
  1110.         andi.l  #$ffff,d7
  1111.         move.l  #line,a5
  1112.  
  1113. dodec:  move.l  d7,d6
  1114.         divu    #10,d6
  1115.         move.w  d6,d7
  1116.         swap    d6
  1117.         addi.w  #16,d6
  1118.         move.b  d6,(a5)+
  1119.         cmpi.w  #0,d7
  1120.         bne     dodec
  1121.  
  1122.         move.l  #pos,-(sp)
  1123.         move.w  #9,-(sp)
  1124.         trap    #1
  1125.         addq.l  #6,sp
  1126.         move.l  #col,-(sp)
  1127.         move.w  #9,-(sp)
  1128.         trap    #1
  1129.         addq.l  #6,sp
  1130.  
  1131. out:    cmpa.l  #line,a5
  1132.         beq     decback
  1133.  
  1134.         move.b  -(a5),d7
  1135.         andi.w  #$ff,d7
  1136.         
  1137.         move.w  d7,-(sp)
  1138.     move.w    #5,-(sp)
  1139.         move.w  #3,-(sp)
  1140.         trap    #13
  1141.         addq.l  #6,sp
  1142.  
  1143.         bra     out
  1144.  
  1145.  
  1146. decback: rts
  1147.  
  1148.  
  1149. ****************print score************
  1150. prtscr:
  1151.     move.l  #0,d7
  1152.         move.w  score,d7
  1153.     andi.l  #$ffff,d7
  1154.         move.l  #line,a5
  1155.  
  1156. sodec:  move.l  d7,d6
  1157.         divu    #10,d6
  1158.         move.w  d6,d7
  1159.         swap    d6
  1160.         addi.w  #16,d6
  1161.         move.b  d6,(a5)+
  1162.         cmpi.w  #0,d7
  1163.         bne     sodec
  1164.  
  1165.         move.l  #spos,-(sp)
  1166.         move.w  #9,-(sp)
  1167.         trap    #1
  1168.         addq.l  #6,sp
  1169.         move.l  #col,-(sp)
  1170.         move.w  #9,-(sp)
  1171.         trap    #1
  1172.         addq.l  #6,sp
  1173.  
  1174. sout:    cmpa.l  #line,a5
  1175.         beq     secback
  1176.  
  1177.         move.b  -(a5),d7
  1178.         andi.w  #$ff,d7
  1179.         
  1180.         move.w  d7,-(sp)
  1181.     move.w    #5,-(sp)
  1182.         move.w  #3,-(sp)
  1183.         trap    #13
  1184.         addq.l  #6,sp
  1185.  
  1186.         bra     sout
  1187. secback:clr.l    d0
  1188.     move.w    score,d0
  1189.     cmpi.l    #65000,d0
  1190.     bgt    ppp
  1191.     rts
  1192. ppp:    move.w  #6,d1     ;copy height to d1
  1193.         move.l  #76,a0    ;shifted sprite address
  1194.     addi.l    screen,a0
  1195. pp1:    move.w    #2,d0
  1196. pp2:    move.l    #0,(a0)+
  1197.     move.l    #0,(a0)+
  1198.     dbf    d0,pp2
  1199.     addi.l    #136,a0
  1200.     dbf    d1,pp1
  1201.  
  1202.     move.w    #0,score
  1203.     rts
  1204.  
  1205. ****************print bounders left************
  1206. prtbnd:    move.l  #0,d7
  1207.         move.w  bound,d7
  1208.         andi.l  #$ffff,d7
  1209.         move.l  #line,a5
  1210.  
  1211. bodec:  move.l  d7,d6
  1212.         divu    #10,d6
  1213.         move.w  d6,d7
  1214.         swap    d6
  1215.         addi.w  #16,d6
  1216.         move.b  d6,(a5)+
  1217.         cmpi.w  #0,d7
  1218.         bne     bodec
  1219.  
  1220.         move.l  #bpos,-(sp)
  1221.         move.w  #9,-(sp)
  1222.         trap    #1
  1223.         addq.l  #6,sp
  1224.         move.l  #col,-(sp)
  1225.         move.w  #9,-(sp)
  1226.         trap    #1
  1227.         addq.l  #6,sp
  1228.  
  1229. bout:    cmpa.l  #line,a5
  1230.         beq     becback
  1231.  
  1232.         move.b  -(a5),d7
  1233.         andi.w  #$ff,d7
  1234.         
  1235.         move.w  d7,-(sp)
  1236.     move.w    #5,-(sp)
  1237.         move.w  #3,-(sp)
  1238.         trap    #13
  1239.         addq.l  #6,sp
  1240.  
  1241.         bra     bout
  1242.  
  1243.  
  1244. becback:rts
  1245.  
  1246. *************puts my mouse interupt in***************** 
  1247. ***************************************
  1248. oldmouse:    blk.l    1,0
  1249. *************puts my mouse interupt in***************** 
  1250. putrout:move.w  #34,-(sp)
  1251.         trap    #14
  1252.         addq.l  #2,sp
  1253.         move.l  d0,a0
  1254.     move.l    16(a0),oldmouse
  1255.         move.l  #myrout,16(a0)
  1256.         rts
  1257. lastb:        dc.w    -1
  1258. **************my ubeut mouse interupt*******************
  1259. myrout:
  1260.     movem.l    d0-d2/a0-a1,-(sp)
  1261.     moveq    #0,d0    
  1262.     move.b    (a0),d0
  1263.     cmpi.b    #$fa,d0
  1264.     bne    myr1
  1265.     move.w    #1,buttondat
  1266.     bra    myrxy
  1267. myr1:
  1268.     cmpi.b    #$f9,d0
  1269.     bne    myr2
  1270.     move.w    #2,buttondat
  1271.     bra    myrxy
  1272. myr2:
  1273.     cmpi.b    #$fb,d0
  1274.     bne    myr3
  1275.     move.w    #3,buttondat
  1276.     bra    myrxy
  1277. myr3:
  1278.     move.w    #0,buttondat
  1279. myrxy:
  1280.     moveq    #0,d0
  1281.     move.b    1(a0),d0
  1282.     ext.w    d0
  1283.     moveq    #0,d1
  1284.     move.b    2(a0),d1
  1285.     ext.w    d1
  1286. *    lsl.w    #6,d0
  1287. *    lsl.w    #6,d1
  1288.     add.w    d0,mx
  1289.     add.w    d1,my
  1290. myr4:    move.w    mx,d0
  1291.     move.w    my,d1
  1292.     bsr    extra
  1293.     move.w    d0,mx
  1294.     move.w    d1,my
  1295.     movem.l    (sp)+,d0-d2/a0-a1
  1296.     rts
  1297.  
  1298. extra:  cmpi.w    #mminx,d0
  1299.         bge    .S extra1
  1300.         move.w    #mminx,d0
  1301.         bra    .S extra2
  1302. extra1: cmpi.w   #mmaxx,d0
  1303.         ble    .S extra2
  1304.         move.w  #mmaxx,d0
  1305. extra2:    cmpi.w  #mminy,d1
  1306.         bge    .S extra3
  1307.         move.w  #mmaxy,d1
  1308.         bra    extra4
  1309. extra3: cmpi.w   #mmaxy,d1
  1310.         ble    .S extra4
  1311.         move.w  #mminy,d1
  1312. extra4:
  1313.         rts
  1314.  
  1315. buttondat:    dc.w    0
  1316. mx:        dc.w    160
  1317. my:        dc.w    100
  1318.  
  1319. mminx:    equ    16    ;13
  1320. mmaxx:    equ    275
  1321. mminy:    equ    0    ;3
  1322. mmaxy:    equ    255    ; 13 123
  1323. **************my ubeut mouse interupt*******************
  1324.  
  1325.  
  1326. ************code to determine  x offset *****************
  1327. *               and absolute screen address             *
  1328. *               parameters to pass on stack as follows  *
  1329. *               1-      x of sprite                     *
  1330. *               2-      y of sprite                     *
  1331. *               3-      screen address                  *
  1332. *       paremeters returned are x offset in d0          *
  1333. *       absolute screen address in d2                   *
  1334. *********************************************************
  1335. putsp:    
  1336. ************bat********************
  1337. bat:    move.w  mx,pblock
  1338.         move.w  #186,pblock+2
  1339.         move.w  #$e,pblock+4
  1340.         move.w  #$2,pblock+6
  1341.         move.l  #batsp,pblock+8
  1342.         move.l  #battemp,pblock+12
  1343.         move.l  screen,pblock+16
  1344.         move.w  #$2,pblock+26
  1345.         move.l  batadd,pblock+30
  1346.     move.l    #batadd,pblock+34
  1347.     move.w    ynflg,d0
  1348.     tst.w    d0
  1349.     bmi    calc
  1350.  
  1351. clr1:   move.w  pblock+4,d1        ;copy height to d1
  1352.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1353.         move.l  pblock+12,a0      ;shifted sprite address
  1354. clr2:   move.w  pblock+6,d0        ;copy width to d0
  1355.         move.l  pblock+30,a1       ;absolute screen address to a1
  1356.         move.l  pblock+30,d6
  1357. clr3:   move.l  (a0)+,d3        ;move all four planes
  1358.         eor.l   d3,(a1)+
  1359.         move.l  (a0)+,d3        ;(2 longs = 4 words(planes))
  1360.         eor.l   d3,(a1)+
  1361.         dbf     d0,clr3         ;repeat width times
  1362.         add.l   #160,pblock+30     ;move pointer to next line
  1363.         dbf     d1,clr2         ;repeat height times
  1364.         move.l  d6,pblock+30
  1365.     move.w    ynflg,d0
  1366.     tst.w    d0
  1367.     bge    calc
  1368.     move.l    ptsin,a0
  1369.     move.w    ballx+2,(a0)
  1370.     move.w    bally+2,2(a0)
  1371.     dc.w    getpix
  1372.     cmpi.w    #5,d0
  1373.     ble    calc
  1374.     neg    xvel
  1375.     neg    yvel    
  1376.  
  1377. calc:    move.w    #1,ynflg
  1378.     clr.l   d0
  1379.         move.w  pblock,d0       ;put x value in d0
  1380.         divu    #16,d0          ;divide by 16 leaves word boundry in d0
  1381.         move.w  pblock+2,d1     ;put y value in d1
  1382.         mulu    #160,d1         ;gives offset in words of line
  1383.         move.w  d0,d3
  1384.         mulu    #8,d3
  1385.         add     d3,d1           ;gives word to poke sprite
  1386.         move.l  pblock+16,d2    ;put screen address in d2
  1387.         add     d1,d2           ;gives actual screen address for sprite
  1388.     move.l    pblock+34,a0
  1389.         move.l  d2,(a0)
  1390.         move.l  d2,pblock+20
  1391.         asr.l   #8,d0
  1392.         asr.l   #8,d0           ;leaves x offset in d0          
  1393.         move.w  d0,pblock+24
  1394.  
  1395.  
  1396. *************CODE TO ROTATE A SPRITE IMAGE***********************
  1397. *       parameters to be passed on the stack in order are       *       
  1398. *       1-      x offset from start of word                     *
  1399. *       2-      address of place to put shifted image(tempsp)   *
  1400. *       3-      address of sprite data                          *
  1401. *       4-      height of object in pixels                      *
  1402. *       5-      width of object in words - 1                    *
  1403. *****************************************************************
  1404. shiftimage:
  1405.         move.w  pblock+4,d1        ;height in d1
  1406.         move.w  pblock+24,d2       ;offset to d2
  1407.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1408.         subq.w  #1,pblock+6        ;width - 1 = width if count starts at zero
  1409.         move.l  pblock+8,a0        ;object pointer to a0
  1410.         move.l  pblock+12,a1       ;image pointer to a1
  1411. si1:    move.w  pblock+6,d0        ;width in d0
  1412.         clr.l   (a1)            ;for each line, the first word of the
  1413.         clr.l   4(a1)           ;image must be cleared
  1414. si0:    clr.l   d4              ;make sure that the top halves of these
  1415.         clr.l   d5              ;registers are zeroed out
  1416.         clr.l   d6
  1417.         clr.l   d7
  1418.         move.w  (a0)+,d4        ;load in one word (four planes)
  1419.         move.w  (a0)+,d5        ;to be rotated
  1420.         move.w  (a0)+,d6
  1421.         move.w  (a0)+,d7
  1422.         ror.l   d2,d4           ;rotate all planes by the offset(d2)
  1423.         ror.l   d2,d5
  1424.         ror.l   d2,d6
  1425.         ror.l   d2,d7
  1426.         or.w    d4,(a1)+        ;add low order bits to the high order bits
  1427.         or.w    d5,(a1)+        ;stored by move instructions farther
  1428.         or.w    d6,(a1)+        ;down in this routine
  1429.         or.w    d7,(a1)+
  1430.         swap    d4              ;move high order bits into lower halves
  1431.         swap    d5              ;of the registers
  1432.         swap    d6
  1433.         swap    d7
  1434.         move.w  d4,(a1)         ;save the high orders bits to be ORed
  1435.         move.w  d5,2(a1)        ;in the loop (do not increment a1 because
  1436.         move.w  d6,4(a1)        ;the ORs in the loop must function on
  1437.         move.w  d7,6(a1)        ;the same addresses as these moves.
  1438.         dbf     d0,si0          ;repeat width times
  1439.         addq.l  #8,a1           ;new line, move to next word( * 4 planes = 8)
  1440.         dbf     d1,si1          ;repeat height times
  1441.         addi.w  #1,pblock+6
  1442.  
  1443. *********code to put sprite on screen********************
  1444. *********parameters to be passed on the stack are********
  1445. *********1-     shifted sprite address (tempsp) *********
  1446. *********2-     absolute screen address to put image*****
  1447. *********3-     height in pixels                *********
  1448. *********4-     width in words -1               *********
  1449.  
  1450. potsp:  move.w  pblock+4,d1     ;copy height to d1
  1451.         subq.w  #1,d1           ;height - 1 = height if count starts at zero
  1452.         move.l  pblock+12,a0    ;shifted sprite address
  1453. rs1:    move.w  pblock+26,d0     ;copy width to d0
  1454.         move.l  pblock+20,a1    ;absolute screen address to a1
  1455.         move.l  pblock+20,d6
  1456. rs0:    move.l  (a0)+,d2    ;move all four planes
  1457.         eor.l   d2,(a1)+
  1458.         move.l  (a0)+,d2    ;(2 longs = 4 words(planes))
  1459.         eor.l   d2,(a1)+
  1460.         dbf     d0,rs0          ;repeat width times
  1461.         add.l   #160,pblock+20  ;move pointer to next line
  1462.         dbf     d1,rs1          ;repeat height times
  1463.         move.l  d6,pblock+20
  1464. done:    rts                     ;done
  1465. *********************joy interupt*********************
  1466. getkey:    lea    key,a1
  1467.     move.b    (a1),d0
  1468.     rts
  1469.  
  1470. getjoy1:lea.l   joy1,a1
  1471.         move.b  (a1),d0
  1472.         rts
  1473.  
  1474. getjoy2:lea.l   joy2,a1
  1475.         move.b  (a1),d0
  1476.         rts
  1477.  
  1478.  
  1479.  
  1480.  
  1481. keyset:
  1482. *    pea     mess1
  1483. *       move.w  #1,-(sp)
  1484. *        move.w  #25,-(sp)
  1485. *        trap    #14
  1486. *        addq.l  #8,sp
  1487.  
  1488. *        pea     mess2
  1489. *        move.w  #0,-(sp)
  1490. *        move.w  #25,-(sp)
  1491.  
  1492. *        trap    #14
  1493. *        addq.l  #8,sp
  1494.         
  1495.         move.w  #34,-(sp)
  1496.         trap    #14
  1497.         addq.l  #2,sp
  1498.         move.l  d0,a0
  1499.         lea.l   keyint,a1
  1500.         move.l  a1,32(a0)
  1501.         rts
  1502. even
  1503. mess1:  dc.b    $12,$14
  1504. mess2:  dc.b    $14
  1505.  
  1506.  
  1507. even
  1508. keyint: lea.l   $fffffc00,a1
  1509.         move.b  0(a1),d0
  1510.         btst    #7,d0
  1511.         beq.s   intk4
  1512.         btst    #0,d0
  1513.         bne.s   kriti
  1514.         andi.b  #$20,d0
  1515.         bne.s   kerror
  1516. kriti:  movem.l d2/a0-a4,-(sp)
  1517.         move.b  2(a1),d0
  1518.         lea.l   intwt,a2
  1519.         cmpi.b  #0,(a2)
  1520.         bne.s   keyj7
  1521.         cmpi.b  #$fc,d0
  1522.         bcs.s   keyj
  1523.         lea.l   joystat,a1
  1524.         cmpi.b  #$ff,d0
  1525.         bne.s   intk1
  1526.         move.b  #2,(a1)
  1527. intko:  bra.s   ekraj
  1528. kerror: move.b  2(a1),d0
  1529. intk4:  rts
  1530.  
  1531. ekraj:  movem.l (sp)+,d2/a0-a4
  1532.         and.b   #$20,d2
  1533.         beq.s   ekraj1
  1534.         move.b  2(a1),d0
  1535. ekraj1: rts
  1536.  
  1537. intk1:  cmpi.b  #$fe,d0
  1538.         beq.s   intk2
  1539.         lea.l   intwt,a4
  1540.         subi.b  #$f6,d0
  1541.         and.l   #$ff,d0
  1542.         lea.l   kentlen,a3
  1543.         move.b  0(a3,d0.w),(a4)
  1544.         bra.S   ekraj
  1545. intk2:  move.b  #1,(a1)
  1546.         bra     ekraj
  1547. keyj:   lea.l   intwt,a2
  1548.         cmpi.b  #0,(a2)
  1549.         beq.s   keyj5
  1550. keyj7:  subi.b  #1,(a2)
  1551.         bra     ekraj
  1552. keyj5:  lea.l   joystat,a1
  1553.         btst    #0,(a1)
  1554.         bne.s   jop1
  1555.         btst    #1,(a1)
  1556.         bne.s   jop2
  1557.     lea.l   nkey,a3
  1558.         move.b  d0,(a3)
  1559.         cmpi.b  #$80,d0
  1560.         bcs.s   keji
  1561.         move.b  #0,d0
  1562.         ;
  1563. keji:   lea.l   key,a3
  1564. keyj1:  move.b  d0,(a3)
  1565.         move.b  #0,(a1)
  1566.         bra     ekraj
  1567. jop1:   lea.l   joy1,a3
  1568.         bra.s   keyj1
  1569. jop2:   lea.l   joy2,a3
  1570.         bra.s   keyj1
  1571. scre:   rts
  1572. even
  1573. nkey:   dc.b    0
  1574. key:    dc.b    0
  1575. joy1:   dc.b    0
  1576. joy2:   dc.b    0
  1577. joystat:dc.b    0
  1578. intwt:  dc.b    0
  1579. kentlen:dc.b    7,5,2,2,2,2,6,2,1,1
  1580. bojaflg:dc.b    0
  1581. even
  1582.         dc.b    0,0,0,0,0,0,0,0
  1583. even
  1584. setloc: dc.l    0
  1585. cintno: dc.b    0
  1586. intim:  dc.b    0
  1587.         
  1588.  
  1589. even
  1590.  
  1591.  
  1592. ************get screen address***************
  1593. getscrn:move.w  #2,-(sp)
  1594.         trap    #14
  1595.         addq.l  #2,sp
  1596.         move.l  d0,screen
  1597.         move.l  d0,screen1
  1598.         move.l  d0,screen2
  1599.         subi.l  #$8000,screen2
  1600.     subi.l    #$10000,d0
  1601.     move.l    d0,screen3
  1602.         rts
  1603.  
  1604.  
  1605.  
  1606. ************change colors****************
  1607. colors: move.l #palette,-(sp)
  1608.         move.w #6,-(sp)
  1609.         trap #14
  1610.         addq.l #6,sp
  1611.         rts
  1612.  
  1613. *****************wait for a key*********************
  1614. wait:   move.w  buttondat,d0
  1615.         tst.w    d0
  1616.         bgt     wback
  1617.         bra     wait
  1618. wback:  rts
  1619. ***************turn mouse off***********************
  1620. mousof: dc.w    $a00a   
  1621.         rts
  1622.  
  1623. ******************get line a params and stuff***************
  1624. linea:  dc.w    $a000
  1625.         move.l  8(a0),intin
  1626.         move.l  12(a0),ptsin
  1627. *       move.w  #0,36(a0)
  1628.         rts
  1629.  
  1630.  
  1631.  
  1632. *********************************************************
  1633. *       a brilliant routine courtesy of janko to        *
  1634. *       insert the vbi addresses in the jump table      *
  1635. *       lea address of routine in a0 do a jsr           *
  1636. *       putvbl and thats it!!!                          *
  1637. *********************************************************
  1638.  
  1639.  
  1640. putvbl: lea     $452,a1
  1641.         move.w  #1,(a1)
  1642.         moveq   #7,d1
  1643.         lea     $456,a1
  1644.         move.l  (a1),a1
  1645. vbl3:   subi.b  #1,d1
  1646.         cmpi.b  #0,d1
  1647.         beq.s   vbl4
  1648.         move.l  (a1)+,d0
  1649.         cmpi.l  #0,d0
  1650.         bne.S   vbl3
  1651.         suba.l  #4,a1
  1652.         move.l  a0,(a1)
  1653. vbl4:   rts
  1654.  
  1655. *********************************************************
  1656. *       my routines for loading in the screens          *
  1657. *       note i use degas format even though I           *
  1658. *       hate the package,due to it's simple format      *
  1659. *       ie: 32l for pallette and straight 32k screen    *
  1660. *       dump                                            *
  1661. *********************************************************
  1662.  
  1663. loadscr:move    #0,-(SP)        ;Open file
  1664.         move.l  #filename,-(SP) ;Address of filename
  1665.         move    #$3D,-(SP)
  1666.         trap    #1              ;Get handle number in D0
  1667.         addq.l  #8,SP
  1668.                 
  1669.         move    D0,-(SP)        ;Save handle
  1670.  
  1671.         move.l  #dummy,-(SP)    ;load pallette into safe area
  1672.         move.l  #34,-(SP)       ;length to read in
  1673.         move    D0,-(SP)        ;Handle
  1674.         move    #$3F,-(SP)      ;bios number
  1675.         trap    #1              ;Read file in
  1676.         add.l   #12,SP
  1677.         move    (sp),d0        
  1678.                
  1679.         move.l  screen2,-(SP)    ;load it straight onto screen
  1680.         move.l  #32000,-(SP)    ;length to read in
  1681.         move    D0,-(SP)        ;Handle
  1682.         move    #$3F,-(SP)      ;bios number
  1683.         trap    #1              ;Read file in
  1684.         add.l   #12,SP
  1685.                 
  1686.         move    #$3E,-(SP)      ;Handle already on stack
  1687.         trap    #1              ;Close file
  1688.         addq.l  #4,SP
  1689.         rts
  1690. ***************************************
  1691. loadtit:move    #0,-(SP)        ;Open file
  1692.         move.l  #titname,-(SP) ;Address of filename
  1693.         move    #$3D,-(SP)
  1694.         trap    #1              ;Get handle number in D0
  1695.         addq.l  #8,SP
  1696.                 
  1697.         move    D0,-(SP)        ;Save handle
  1698.  
  1699.         move.l  #dummy,-(SP)    ;load pallette into safe area
  1700.         move.l  #34,-(SP)       ;length to read in
  1701.         move    D0,-(SP)        ;Handle
  1702.         move    #$3F,-(SP)      ;bios number
  1703.         trap    #1              ;Read file in
  1704.         add.l   #12,SP
  1705.         move    (sp),d0        
  1706.                
  1707.         move.l  screen3,-(SP)    ;load it straight onto screen
  1708.         move.l  #32000,-(SP)    ;length to read in
  1709.         move    D0,-(SP)        ;Handle
  1710.         move    #$3F,-(SP)      ;bios number
  1711.         trap    #1              ;Read file in
  1712.         add.l   #12,SP
  1713.                 
  1714.         move    #$3E,-(SP)      ;Handle already on stack
  1715.         trap    #1              ;Close file
  1716.         addq.l  #4,SP
  1717.         rts
  1718.  
  1719. *******************blocks for rotated sprites*************
  1720. tempsp: blk.w   500
  1721. onscreen:       blk.l   1
  1722. pblock: blk.l   40
  1723. block:    blk.l    40
  1724. ghosttemp:    blk.w    500
  1725. ghostad:blk.l    1
  1726. gynflg:    blk.w    1
  1727. gblock:    blk.l    40
  1728. ghostx:    blk.w    1
  1729. ghosty:    blk.w    1
  1730. safe:    blk.l    1
  1731. current:blk.w    1
  1732. goutflg:blk.w    1
  1733. keysav:    blk.l    1
  1734. kkk:    blk.l    1
  1735. plev:    blk.w    1
  1736. pdelay:    blk.w    1
  1737. count:    blk.w    1
  1738. catches:blk.w    1
  1739. fast:    blk.w    1
  1740. score:    blk.w    1
  1741. bound:    blk.w    1
  1742. brtimes:blk.w    1
  1743. which:    blk.l    1
  1744. bad:    blk.l    1
  1745. bad2:    blk.l    1
  1746. balldo:    blk.w    1
  1747. dir:    blk.w   1
  1748. tmx:    blk.w   1
  1749. nrem:    blk.w    1
  1750. nbrks:    blk.w    1
  1751. bynflg:    blk.w    1
  1752. bdel:   blk.w   1
  1753. screen: blk.l   1
  1754. ynflg:  blk.w   1
  1755. batadd: blk.l   1
  1756. screen2:blk.l   1
  1757. screen1:blk.l   1
  1758. screen3:blk.l    1
  1759. clrbr:    blk.w    50,0
  1760. dummy:  blk.l   32
  1761. xvel:    blk.w    1
  1762. yvel:    blk.w    1
  1763. thbrick:blk.w    1
  1764. brick:    blk.w    1
  1765. lev:    blk.w    1
  1766. bbx:    blk.w    1
  1767. bby:    blk.w    1
  1768. filename:       dc.b    'brkmain.pi1',0  
  1769. titname:    dc.b    'brktitle.pi1',0
  1770. even
  1771. tempad: blk.l   1       
  1772. line:   blk.b   10
  1773. pos:    dc.b    27,89,32,38,0
  1774. col:    dc.b    27,98,15,0
  1775. spos:    dc.b    27,89,32,51,0
  1776. bpos:    dc.b    27,89,32,69,0
  1777. even
  1778. oldshad:blk.l   1
  1779. bitoffs:blk.w   1
  1780. tempsh: blk.l   1
  1781. whsp:   blk.w   1
  1782. first:  blk.w   1
  1783. intin:  blk.l   1
  1784. ptsin:  blk.l   1
  1785. putpix: equ     $a001
  1786. getpix: equ     $a002
  1787. lastx:  blk.w   1
  1788. lasty:  blk.w   1
  1789. area:    blk.w    200
  1790. balltemp:    blk.w    500
  1791. battemp:blk.w    500
  1792. ballx:    blk.w    1
  1793. bally:    blk.w    1
  1794. ballad:    blk.l    1
  1795. outflg:    blk.w    1
  1796. even
  1797. *  Hardware color pallet  (color 0 to 15):
  1798. *
  1799. boomcol:dc.w    $0106,$0205,$0304,$0403,$0502,$0601,$0700,$0601
  1800.     dc.w    $0502,$0403,$0304,$0205,$0106,$0007
  1801. palette:dc.w    $0007,$0005,$0501,$0056,$0045,$0034,$0410,$0520
  1802.     dc.w    $0630,$0030,$0250,$0070,$0700,$0224,$0455,$0777
  1803.  
  1804.  
  1805. batsp:    dc.w    $007F,$007F,$3F80,$3FFF,$F000,$F000,$0FE0,$FFE0
  1806.     dc.w    $00FF,$00FF,$7F00,$7FFF,$F800,$F800,$07F0,$FFF0
  1807.     dc.w    $3EFF,$3EFF,$C100,$FFFF,$FBE0,$FBE0,$0418,$FFF8
  1808.     dc.w    $1EFF,$7EFF,$8100,$FFFF,$FBC0,$FBF0,$0408,$FFF8
  1809.     dc.w    $8000,$7EFF,$0100,$FFFF,$0008,$FBF0,$0400,$FFF8
  1810.     dc.w    $C000,$3EFF,$0100,$FFFF,$0018,$FBE0,$0400,$FFF8
  1811.     dc.w    $7EFF,$0100,$0100,$7EFF,$FBF0,$0400,$0400,$FBF0
  1812.     dc.w    $3EFF,$0100,$0100,$3EFF,$FBF0,$0400,$0400,$FBE0
  1813.     dc.w    $0FFF,$0000,$0000,$0000,$FFF8,$0000,$0000,$0000
  1814.     dc.w    $1FFF,$0000,$0000,$0000,$FFFC,$0000,$0000,$0000
  1815.     dc.w    $1FFF,$0000,$0000,$0000,$FFFC,$0000,$0000,$0000
  1816.     dc.w    $1FFF,$0000,$0000,$0000,$FFFC,$0000,$0000,$0000
  1817.     dc.w    $0FFF,$0000,$0000,$0000,$FFF8,$0000,$0000,$0000
  1818.     dc.w    $07FF,$0000,$0000,$0000,$FFF0,$0000,$0000,$0000
  1819.  
  1820.  
  1821. ballsp:    dc.w    $6000,$6000,$6000,$1000,$5000,$D000,$D000,$3800
  1822.     dc.w    $4400,$C000,$C000,$3800,$7E00,$F800,$F800,$0000
  1823.     dc.w    $0E00,$7000,$7000,$0000,$3E00,$0000,$0000,$0000
  1824.     dc.w    $1C00,$0000,$0000,$0000
  1825.  
  1826. ghostbr:dc.w    $7FFF,$FFFF,$0000,$FFFF,$8001,$0001,$0000,$8001
  1827.     dc.w    $8001,$1EF1,$0000,$9EF1,$8001,$0281,$0000,$8281
  1828.     dc.w    $8001,$1EF1,$0000,$9EF1,$8001,$1011,$0000,$9011
  1829.     dc.w    $8001,$1EF1,$0000,$9EF1,$FFFE,$0001,$0000,$FFFF
  1830.  
  1831.  
  1832.  
  1833. bricks:    dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1834.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1835.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1836.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1837.     dc.w    $0000,$FFFF,$0000,$0000,$0000,$FFFF,$0000,$0000
  1838.     dc.w    $1FF8,$E007,$1FF8,$1FF8,$200C,$FFF3,$3FFC,$3FFC
  1839.     dc.w    $3004,$FFFB,$3FFC,$3FFC,$1FF8,$FFFF,$1FF8,$1FF8
  1840.     dc.w    $0000,$FFFF,$0000,$0000,$0000,$FFFF,$0000,$0000
  1841.     dc.w    $FFFF,$FFFF,$FFFF,$FFFF,$C001,$FFFF,$FFFF,$FFFF
  1842.     dc.w    $8001,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1843.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1844.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1845.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$B001,$7FFF,$FFFF,$FFFF
  1846.     dc.w    $E001,$7FFF,$FFFF,$FFFF,$C001,$FFFF,$FFFF,$FFFF
  1847.     dc.w    $8001,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1848.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1849.     dc.w    $FFFF,$FFFF,$FFFF,$FFFF,$8601,$7FFF,$FFFF,$FFFF
  1850.     dc.w    $8C01,$7FFF,$FFFF,$FFFF,$9801,$7FFF,$FFFF,$FFFF
  1851.     dc.w    $B001,$7FFF,$FFFF,$FFFF,$E001,$7FFF,$FFFF,$FFFF
  1852.     dc.w    $C001,$FFFF,$FFFF,$FFFF,$FFFE,$8001,$FFFF,$FFFF
  1853.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$80C1,$7FFF,$FFFF,$FFFF
  1854.     dc.w    $8181,$7FFF,$FFFF,$FFFF,$8301,$7FFF,$FFFF,$FFFF
  1855.     dc.w    $8601,$7FFF,$FFFF,$FFFF,$8C01,$7FFF,$FFFF,$FFFF
  1856.     dc.w    $9801,$7FFF,$FFFF,$FFFF,$FFFE,$3001,$FFFF,$FFFF
  1857.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8019,$7FFF,$FFFF,$FFFF
  1858.     dc.w    $8031,$7FFF,$FFFF,$FFFF,$8061,$7FFF,$FFFF,$FFFF
  1859.     dc.w    $80C1,$7FFF,$FFFF,$FFFF,$8181,$7FFF,$FFFF,$FFFF
  1860.     dc.w    $8301,$7FFF,$FFFF,$FFFF,$FFFE,$0601,$FFFF,$FFFF
  1861.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8003,$7FFF,$FFFF,$FFFF
  1862.     dc.w    $8007,$7FFF,$FFFF,$FFFF,$800D,$7FFF,$FFFF,$FFFF
  1863.     dc.w    $8019,$7FFF,$FFFF,$FFFF,$8031,$7FFF,$FFFF,$FFFF
  1864.     dc.w    $8061,$7FFF,$FFFF,$FFFF,$FFFE,$00C1,$FFFF,$FFFF
  1865.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1866.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1867.     dc.w    $8003,$7FFF,$FFFF,$FFFF,$8007,$7FFF,$FFFF,$FFFF
  1868.     dc.w    $800D,$7FFF,$FFFF,$FFFF,$FFFE,$0019,$FFFF,$FFFF
  1869.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1870.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1871.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1872.     dc.w    $8003,$7FFF,$FFFF,$FFFF,$FFFF,$0007,$FFFF,$FFFF
  1873.     dc.w    $7FFF,$FFFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1874.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1875.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$8001,$7FFF,$FFFF,$FFFF
  1876.     dc.w    $8001,$7FFF,$FFFF,$FFFF,$FFFE,$0001,$FFFF,$FFFF
  1877.  
  1878.  
  1879.  
  1880.  
  1881. redcol:    dc.w    $0700,$0600,$0500,$0400,$0500,$0600
  1882.  
  1883.  
  1884.  
  1885. *****opening
  1886. lev1:    dc.w    $0224,$0455,79,0
  1887.     dc.w    37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52
  1888.     dc.w    91,92,93,94,95,96,97,98,99,100,101,102,103,104,105
  1889.     dc.w    106,145,146,147,148,149,150,151,152,153,154,155
  1890.     dc.w    156,157,158,159,160,199,200,201,202,203,204,205
  1891.     dc.w    206,207,208,209,210,211,212,213,214,253,254,255
  1892.     dc.w    256,257,258,259,260,261,262,263,264,265,266,267,268
  1893. **opening double
  1894. lev2:    dc.w    $0035,$0057,79,64
  1895.     dc.w    37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52
  1896.     dc.w    91,92,93,94,95,96,97,98,99,100,101,102,103,104,105
  1897.     dc.w    106,145,146,147,148,149,150,151,152,153,154,155
  1898.     dc.w    156,157,158,159,160,199,200,201,202,203,204,205
  1899.     dc.w    206,207,208,209,210,211,212,213,214,253,254,255
  1900.     dc.w    256,257,258,259,260,261,262,263,264,265,266,267,268
  1901. ***alternate
  1902. lev3:    dc.w    $0331,$0657,83,64
  1903.     dc.w    36,37,53,90,161,198
  1904.     dc.w    38,39,40,41,42,43,44,45,46,47,48,49,50,51,92,93,94,95
  1905.     dc.w    96,97,98,99,100,101,102,103,104,105,106,107,
  1906.     dc.w    144,145,146,147,148,149,150,151,152,153,154,155,156
  1907.     dc.w    157,158,159,200,201,202,203,204,205,206,207,208,209
  1908.     dc.w    210,211,212,213,214,215,252,253,254,255,256
  1909.     dc.w    257,258,259,260,261,262,263,264,265,266,267
  1910. *plus
  1911. lev4:    dc.w    $0030,$0060,37,0
  1912.     dc.w    44,45,62,63,80,81,98,99,116,117,134,135,152,153
  1913.     dc.w    170,171,188,189,206,207,224,225,242,243,260,261    
  1914.     dc.w    146,147,148,149,150,151,154,155,156,157,158,159
  1915. **arch
  1916. lev5:    dc.w    $0405,$0757,83,64
  1917.     dc.w    38,39,51,52,56,57,58,59,60,61,62,63,64,65,66,67,68
  1918.     dc.w    69,70,74,75,92,93,110,111,128,129,146,147,164,165
  1919.     dc.w    182,183,200,201,218,219,236,237,254,255,87,88,105
  1920.     dc.w    106,123,124,141,142,159,160,177,178,195,196,213,214
  1921.     dc.w    231,232,249,250,267,268,132,133,134,135,136,137,138
  1922.     dc.w    150,151,152,153,154,155,156,168,169,170,171,172,173,174
  1923.  
  1924. ******lots
  1925. lev9:    dc.w    $0224,$0455,165,0,36
  1926.     dc.w    37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,57,58
  1927.     dc.w    59,60,61,62,63,64,65,66,67,68,75,76,77,78,79,80,81,82
  1928.     dc.w    83,84,85,86,90,91,92,93,94,95,96,97,98,99,100
  1929.     dc.w    101,102,103,104,105,106,107,113,114,115,116,117,118
  1930.     dc.w    119,120,132,133,134,135,136,137,144,145,146,147,148
  1931.     dc.w    149,150,151,152,153,154,155,156,157,158,159,160,161
  1932.     dc.w    168,169,170,171,172,173,185,186,187,188,189,190,191
  1933.     dc.w    192,198,199,200,201,202,203,204,205,206,207,208,209
  1934.     dc.w    210,211,212,213,214,215,219,220,221,222,223,224,225
  1935.     dc.w    226,227,228,229,230,237,238,239,240,241,242,243,244
  1936.     dc.w    245,246,247,248,252,253,254,255,256,257,258,259,260
  1937.     dc.w    261,262,263,264,265,266,267,268,269
  1938.  
  1939. ***AM
  1940. lev10:    dc.w    $0035,$0057,122,0    
  1941.     dc.w    40,41,42,43,44,45,51,57,58,59,60,61,62,63,64,68,69
  1942.     dc.w    75,76,77,78,79,80,81,82,83,85,86,87,93,94,97,98,99,100
  1943.     dc.w    101,102,103,104,105,111,112,115,116,117,118,119,120
  1944.     dc.w    121,122,123,129,130,133,134,135,136,137,138,139,140
  1945.     dc.w    141,147,148,149,150,151,152,153,154,156,158,159,165
  1946.     dc.w    166,167,168,169,170,171,172,176,177,183,184,187,188
  1947.     dc.w    189,190,194,195,201,202,205,206,207,208,212,213,219
  1948.     dc.w    220,223,224,225,226,230,231,237,238,241,242,243,244
  1949.     dc.w    248,249,255,256,259,260,261,262,266,267
  1950. ***TB
  1951. lev11:    dc.w    $0331,$0651,52,64
  1952.     dc.w    76,77,78,79,80,81,82,83,84,85,96,114,132,150,168,186
  1953.     dc.w    204,205,222,223,240,241,258,259,99,117,135,153,154
  1954.     dc.w    171,172,173,174,189,207,225,226,243,244,261,262,263,264
  1955.     dc.w    103,121,139,157,175,193,211,229,247,265
  1956. *atari***
  1957. lev12:    dc.w    $0030,$0060,67,64
  1958.     dc.w    92,105,42,60,78,96,114,132,150,168,186,204,185
  1959.     dc.w    202,203,220,221,237,238,254,255,256,44,45,62
  1960.     dc.w    63,80,81,98,99,116,117,134,135,152,153,170,171
  1961.     dc.w    188,189,206,207,224,225,242,243,260,261,47,65,83,101
  1962.     dc.w    119,137,155,173,191,209,192,210,211,228,229,247,248,265
  1963.     dc.w    266,267
  1964.  
  1965. lev13:    dc.w    $0405,$0707,86,64
  1966.     dc.w    58,59,60,61,62,63,64,65,66,67,76,85,94,96,97,98,99
  1967.     dc.w    100,101,102,103,112,121,130,131,132,133,134,135,136
  1968.     dc.w    137,139,148,157,166,168,169,170,171,172,173,174,175
  1969.     dc.w    184,193,202,203,204,205,206,207,208,209,211,220,229
  1970.     dc.w    238,239,240,241,242,243,244,245,246,247,256,265,274
  1971.     dc.w    275,276,277,278,279,280,281,283,288,289,290,291,292
  1972.     dc.w    301,302,303,304,305
  1973.  
  1974. lev14:    dc.w    $0035,$0057,69,64
  1975.     dc.w    292,300,303,290,297,298
  1976.     dc.w    293,294,295,296,299,301,302,291,252,253,254,255
  1977.     dc.w    256,257,258,259,262,263,264,265,266,267,268,269,221
  1978.     dc.w    222,223,224,225,226,227,228,180,181,182,183,184,185
  1979.     dc.w    186,187,190,191,192,193,194,195,196,197,25,43,61,79
  1980.     dc.w    97,115,133,151,28,46,64,82,100,118,136,154    
  1981. lev15:    dc.w    $0244,$0355,10,0
  1982.     dc.w    18,19,20,21,22,23,24,25,26,27,28
  1983.  
  1984. pattern:
  1985.     dc.l    lev1,lev2,lev3,lev4,lev5,lev9
  1986.     dc.l    lev10,lev11,lev12,lev13,lev14
  1987.  
  1988.  
  1989. adds:    dc.w    2568,2576,2584,2592,2600,2608,2616,2624,2632,2640
  1990.     dc.w    2648,2656,2664,2672,2680,2688,2696,2704
  1991.     dc.w    3848,3856,3864,3872,3880,3888,3896,3904,3912,3920
  1992.     dc.w    3928,3936,3944,3952,3960,3968,3976,3984
  1993.     dc.w    5128,5136,5144,5152,5160,5168,5176,5184,5192,5200
  1994.     dc.w    5208,5216,5224,5232,5240,5248,5256,5264
  1995.     dc.w    6408,6416,6424,6432,6440,6448,6456,6464,6472,6480
  1996.     dc.w    6488,6496,6504,6512,6520,6528,6536,6544
  1997.     dc.w    7688,7696,7704,7712,7720,7728,7736,7744,7752,7760
  1998.     dc.w    7768,7776,7784,7792,7800,7808,7816,7824
  1999.     dc.w    8968,8976,8984,8992,9000,9008,9016,9024,9032,9040
  2000.     dc.w    9048,9056,9064,9072,9080,9088,9096,9104
  2001.     dc.w    10248,10256,10264,10272,10280,10288,10296,10304,10312
  2002.     dc.w    10320,10328,10336,10344,10352,10360,10368,10376,10384
  2003.     dc.w    11528,11536,11544,11552,11560,11568,11576,11584,11592
  2004.     dc.w    11600,11608,11616,11624,11632,11640,11648,11656,11664
  2005.     dc.w    12808,12816,12824,12832,12840,12848,12856,12864,12872
  2006.     dc.w    12880,12888,12896,12904,12912,12920,12928,12936,12944
  2007.     dc.w    14088,14096,14104,14112,14120,14128,14136,14144,14152
  2008.     dc.w    14160,14168,14176,14184,14192,14200,14208,14216,14224
  2009.     dc.w    15368,15376,15384,15392,15400,15408,15416,15424,15432
  2010.     dc.w    15440,15448,15456,15464,15472,15480,15488,15496,15504
  2011.     dc.w    16648,16656,16664,16672,16680,16688,16696,16704,16712
  2012.     dc.w    16720,16728,16736,16744,16752,16760,16768,16776,16784
  2013.     dc.w    17928,17936,17944,17952,17960,17968,17976,17984,17992
  2014.     dc.w    18000,18008,18016,18024,18032,18040,18048,18056,18064
  2015.     dc.w    19208,19216,19224,19232,19240,19248,19256,19264,19272
  2016.     dc.w    19280,19288,19296,19304,19312,19320,19328,19336,19344
  2017.     dc.w    20488,20496,20504,20512,20520,20528,20536,20544,20552
  2018.     dc.w    20560,20568,20576,20584,20592,20600,20608,20616,20624
  2019.     dc.w    21768,21776,21784,21792,21800,21808,21816,21824,21832
  2020.     dc.w    21840,21848,21856,21864,21872,21880,21888,21896,21904
  2021.     dc.w    23048,23056,23064,23072,23080,23088,23096,23104,23112
  2022.     dc.w    23120,23128,23136,23144,23152,23160,23168,23176,23184
  2023. even
  2024. hitbat:    dc.b    0,0,1,0,2,0,3,0,4,0,5,1,6,0,7,$3b,8,$10,9,$10,10,$10
  2025.     dc.b    11,0,12,$10,13,9
  2026.     dc.b    $80,2,$81,4,$40,1,$82,0,0
  2027. hitbr:    dc.b    0,0,1,0,2,0,3,0,4,0,5,0,6,0,7,$3e,8,$10,9,$10,10,$10
  2028.     dc.b    11,0,12,$10,13,9
  2029.     dc.b    $80,$20,$81,0,$40,1,$82,0,0
  2030. hitbr2:    dc.b    0,0,1,0,2,$20,3,0,4,0,5,1,6,0,7,$3c,8,$10,9,$10,10,$10
  2031.     dc.b    11,0,12,$10,13,0
  2032.     dc.b    $80,2,$81,0,$40,1,$82,0,0
  2033. boom:    dc.b    0,0,1,$f,2,0,3,0,4,0,5,1,6,$1f,7,$2e,8,$10,9,$10,10,$0
  2034.     dc.b    11,0,12,$80,13,9,$82,0
  2035.  
  2036. even
  2037.  
  2038.  
  2039.  
  2040.  
  2041. ə